import {_decorator, Component, Node, Vec3} from 'cc';

const {ccclass, property} = _decorator;

/**
 * 游戏相机脚本
 */
@ccclass('GameCameraController')
export class GameCameraController extends Component {
    /**
     * 相机跟随的目标节点
     */
    public followTarget: Node;

    /**
     * 初始相机世界坐标
     */
    private originCameraWorldPosition: Vec3 = new Vec3();
    /**
     * 目标相机世界坐标
     */
    private targetCameraWorldPosition: Vec3 = new Vec3();
    /**
     * 当前相机世界坐标
     */
    private currentCameraWorldPosition: Vec3 = new Vec3();

    start() {
        // 初始化相机世界坐标
        this.originCameraWorldPosition.set(this.node.worldPosition);
    }

    /**
     * 重置相机位置
     */
    public resetCamera() {
        // 将相机位置重置为初始位置
        this.targetCameraWorldPosition.set(this.originCameraWorldPosition);
    }

    lateUpdate() {
        // 当相机没有跟随目标时
        if (!this.followTarget || !this.followTarget.worldPosition || !this.followTarget.active) {
            // 直接返回
            return;
        }

        // 将相机的目标世界坐标设置为跟随目标的世界坐标
        this.targetCameraWorldPosition = this.targetCameraWorldPosition.lerp(this.followTarget.worldPosition, 0.5);
        // 设置相机的当前世界坐标
        this.currentCameraWorldPosition.set(this.originCameraWorldPosition.x + this.targetCameraWorldPosition.x,
            this.originCameraWorldPosition.y, this.originCameraWorldPosition.z + this.targetCameraWorldPosition.z);
        // 设置相机世界坐标
        this.node.setWorldPosition(this.currentCameraWorldPosition);
    }
}

